package com.mt.mall.dao.good;

import com.mt.common.core.web.base.PageDTO;
import com.mt.common.core.web.base.PageResultDTO;
import com.mt.mall.dto.good.ShippingCartDto;
import com.mt.mall.entity.good.ShoppingCart;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Component;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
@Component(value = "shoppingCartDao")
public interface ShoppingCartDao {

    /**
    * 根据分页参数查询购物车集合
    *
    * @param pageDTO 分页条件
    */
    public List<ShoppingCart> findShoppingCarts(PageDTO pageDTO);

    /**
    * 查询全部购物车集合
    *
    */
    public List<ShoppingCart> findAllShoppingCarts();

    /**
    * 查询所有购物车集合(只提取ID 和 Name)
    *
    */
    public List<ShoppingCart> findAllShoppingCartsWithIdName();

    /**
    * 根据名称查询购物车集合(只提取ID 和 Name)
    *
    * @param shoppingCartName 名称
    */
    public List<ShoppingCart> findShoppingCartsWithIdNameByName(@Param("shoppingCartName") String shoppingCartName);

    /**
    * 根据ID查询指定的购物车(只提取ID 和 Name)
    *
    * @param shoppingCartId Id
    */
    public ShoppingCart findShoppingCartsWithIdNameById(@Param(" shoppingCartId") Long shoppingCartId);

    /**
    * 根据分页参数查询购物车集合的数量
    *
    * @param pageDTO 分页条件
    */
    public Long findShoppingCartTotalCount(PageDTO pageDTO);

    /**
    * 根据ID查询指定的购物车
    *
    * @param shoppingCartId Id
    */
    public ShoppingCart findShoppingCart(@Param("shoppingCartId") Long shoppingCartId);

    /**
    * 根据ID查询指定的购物车(包含外键)
    *
    * @param shoppingCartId Id
    */
    public ShoppingCart findShoppingCartWithForeignName(@Param("shoppingCartId") Long shoppingCartId);

    /**
    * 新增购物车
    *
    * @param shoppingCart 实体对象
    */
    public Long saveShoppingCart(ShoppingCart shoppingCart);

    /**
    * 更新购物车
    *
    * @param shoppingCart 实体对象
    */
    public Long updateShoppingCart(ShoppingCart shoppingCart);

    /**
    * 根据ID删除购物车
    *
    * @param shoppingCartId ID
    */
    public Long deleteShoppingCart(@Param("shoppingCartId") Long shoppingCartId);

    List<ShippingCartDto> findShippingCartForDis(PageDTO pageDTO);

    void delShoppingCart(@Param("shoppingCartIds") List<Long> shoppingCartIds);

    void updateCount(@Param("shoppingCartId") Long shoppingCartId, @Param("count") Integer count);

    Long findShoppingCartIdByCommodity(@Param("commodityId") Long commodityId,@Param("specification") String specification,@Param("loginUserId") Long loginUserId);

    void settlement(@Param("shoppingCartId") Long shoppingCartId);
}
